// 版权归 Epic Games, Inc. 所有。保留所有权利。

#include "LyraBoundActionButton.h"

#include "CommonInputSubsystem.h"
#include "CommonInputTypeEnum.h"

#include UE_INLINE_GENERATED_CPP_BY_NAME(LyraBoundActionButton)

class UCommonButtonStyle;

/**
 * 原生构造函数实现
 */
void ULyraBoundActionButton::NativeConstruct()
{
	Super::NativeConstruct(); // 调用父类构造

	// 获取输入子系统并绑定输入方法改变事件
	if (UCommonInputSubsystem* InputSubsystem = GetInputSubsystem())
	{
		InputSubsystem->OnInputMethodChangedNative.AddUObject(this, &ThisClass::HandleInputMethodChanged);
		HandleInputMethodChanged(InputSubsystem->GetCurrentInputType()); // 处理当前输入方法
	}
}

/**
 * 处理输入方法改变事件
 * @param NewInputMethod 新的输入方法
 */
void ULyraBoundActionButton::HandleInputMethodChanged(ECommonInputType NewInputMethod)
{
	TSubclassOf<UCommonButtonStyle> NewStyle = nullptr; // 新样式指针

	// 根据输入类型选择对应样式
	if (NewInputMethod == ECommonInputType::Gamepad)
	{
		NewStyle = GamepadStyle; // 使用游戏手柄样式
	}
	else if (NewInputMethod == ECommonInputType::Touch)
	{
		NewStyle = TouchStyle; // 使用触摸样式
	}
	else
	{
		NewStyle = KeyboardStyle; // 使用键盘样式
	}

	// 如果找到新样式则设置
	if (NewStyle)
	{
		SetStyle(NewStyle);
	}
}